import re
import argparse
import sys
import os

class WCTool:
    """文本计数统计工具 - 基础功能版本"""
    
    def __init__(self):
        self.stats = {
            'char_count': 0,
            'word_count': 0,
            'sentence_count': 0,
            'line_count': 0
        }
    
    def count_chars(self, text):
        """统计字符数（包括空格和换行符）"""
        return len(text)
    
    def count_words(self, text):
        """统计单词数"""
        # 使用正则表达式匹配单词（字母序列）
        words = re.findall(r'\b[a-zA-Z]+\b', text)
        return len(words)
    
    def count_sentences(self, text):
        """统计句子数"""
        # 使用正则表达式匹配句子结束符 . ! ?
        sentences = re.findall(r'[^.!?]*[.!?]', text)
        return len(sentences)
    
    def analyze_file(self, filename):
        """分析文件并返回统计结果"""
        try:
            with open(filename, 'r', encoding='utf-8') as file:
                content = file.read()
            
            # 基础统计
            self.stats['char_count'] = self.count_chars(content)
            self.stats['word_count'] = self.count_words(content)
            self.stats['sentence_count'] = self.count_sentences(content)
            self.stats['line_count'] = len(content.splitlines())
            
            return self.stats
            
        except FileNotFoundError:
            print(f"错误：文件 '{filename}' 未找到")
            sys.exit(1)
        except Exception as e:
            print(f"错误：读取文件时发生错误 - {e}")
            sys.exit(1)


def main():
    parser = argparse.ArgumentParser(
        description='文本计数统计工具 - 基础功能版本',
        epilog='''
使用示例:
  %(prog)s file.txt                    # 显示所有基础统计
  %(prog)s -c file.txt                 # 仅统计字符数
  %(prog)s -w file.txt                 # 仅统计单词数
  %(prog)s -s file.txt                 # 仅统计句子数
  %(prog)s -l file.txt                 # 仅统计行数
  %(prog)s -a file.txt                 # 显示所有基础统计
        '''
    )
    
    # 基础功能参数
    parser.add_argument('filename', help='要分析的文件名')
    parser.add_argument('-c', '--chars', action='store_true', help='统计字符数')
    parser.add_argument('-w', '--words', action='store_true', help='统计单词数')
    parser.add_argument('-s', '--sentences', action='store_true', help='统计句子数')
    parser.add_argument('-l', '--lines', action='store_true', help='统计行数')
    parser.add_argument('-a', '--all', action='store_true', help='显示所有基础统计信息')
    
    args = parser.parse_args()
    
    # 验证文件存在
    if not os.path.exists(args.filename):
        print(f"错误：文件 '{args.filename}' 不存在")
        sys.exit(1)
    
    wc = WCTool()
    stats = wc.analyze_file(args.filename)
    
    # 输出结果
    output_lines = []
    
    # 如果没有指定任何参数，默认显示所有统计
    show_all = not any([args.chars, args.words, args.sentences, args.lines])
    
    if args.chars or args.all or show_all:
        output_lines.append(f"字符数: {stats['char_count']}")
    
    if args.words or args.all or show_all:
        output_lines.append(f"单词数: {stats['word_count']}")
    
    if args.sentences or args.all or show_all:
        output_lines.append(f"句子数: {stats['sentence_count']}")
    
    if args.lines or args.all or show_all:
        output_lines.append(f"行数: {stats['line_count']}")
    
    # 打印所有输出
    for line in output_lines:
        print(line)


if __name__ == '__main__':
    main()